package lng

import (
	"time"
)

// 词汇
type Word interface {
	Characters
	// 词汇所属语言，如不确定，应返回 nil。如阿拉伯数字、号码代码等，不属于任一语言（或属于所有语言），应返回 nil。
	// 在翻译场景中，为 nil 或语言相同时，就无需翻译。
	Language() LanguageTag
}

// 可按时间定位的词汇
type TimeLocatableWord interface {
	Word
	Start() time.Duration // 词汇的开头离起始点的时间
	End() time.Duration   // 词汇的结束离起始点的时间
}

// 词汇 IO：将字符串输入进行分词，输出词汇。
type WordsIO interface {
	// 以字符串或二进制形式写入任意字符串，关闭写入端来表示输入结束
	CharactersWriter
	// 读取词汇，如果读取失败，返回 nil, error，否则 返回 Word, nil；不可能同时返回 Word, error 或 nil, nil。
	// 当读取结束（写入端已关闭），返回 nil, io.EOF。
	// 具体实现可以在阻塞的，也可以是非阻塞的。
	// 如果非阻塞的实现暂时无可读取的内容，且写入端未关闭，则返回 nil, io.ErrNoProgress
	Output() (Word, error)
}
